Docker ๋ฐ Docker Compose ๊ธฐ์ด: ์ปจํ ์ด๋๋ก ํ๊ฒฝ ํตํฉํ๊ธฐ
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๊ฐ์ฅ ํํ ๋ฌธ์ ๋ "๋ด ์ปดํจํฐ์์๋ ์ ๋๋๋ฐ ์๋ฒ์์๋ ์ ๋๋ค"๋ ๊ฒ์ ๋๋ค. **Docker(๋์ปค)**๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ์คํ ํ๊ฒฝ์ '์ปจํ ์ด๋'๋ผ๋ ๋จ์๋ก ๋ฌถ์ด ์ด๋์๋ ๋์ผํ๊ฒ ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
1. Docker๋ ๋ฌด์์ธ๊ฐ?
Docker๋ OS ์์ค์ ๊ฐ์ํ๋ฅผ ํตํด ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ(์ปจํ ์ด๋)์์ ์คํํ๋ ๊ธฐ์ ์ ๋๋ค.
- ์ด๋ฏธ์ง(Image): ์คํ์ ํ์ํ ์ฝ๋, ๋ฐํ์, ์ค์ ๋ฑ์ ๋ด์ ์ฝ๊ธฐ ์ ์ฉ ํ ํ๋ฆฟ์ ๋๋ค. (๋ถ์ด๋นต ํ)
- ์ปจํ ์ด๋(Container): ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ์ ๋๋ค. ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํฉ๋๋ค. (๋ถ์ด๋นต)
2. Spring Boot ํ๋ก์ ํธ Dockerfile ์์ฑํ๊ธฐ
ํ๋ก์ ํธ ๋ฃจํธ์ Dockerfile์ด๋ผ๋ ์ด๋ฆ์ ํ์ผ์ ๋ง๋ค๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
# 1. ๋น๋ ์คํ
์ด์ง
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY . .
RUN ./gradlew bootJar
# 2. ์คํ ์คํ
์ด์ง (์ด๋ฏธ์ง ์ต์ ํ)
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]3. Docker Compose: ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ
๋ณดํต ์น ์๋น์ค๋ '์ ํ๋ฆฌ์ผ์ด์
'๊ณผ '๋ฐ์ดํฐ๋ฒ ์ด์ค'๊ฐ ํจ๊ป ํ์ํฉ๋๋ค. Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด docker-compose.yml ํ์ผ ํ๋๋ก ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.
docker-compose.yml ์์
services:
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
app:
build: .
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb- ์คํ:
docker-compose up -d(๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ) - ์ค์ง:
docker-compose down
4. ์ Docker๋ฅผ ์จ์ผ ํ ๊น?
- ํ๊ฒฝ ์ผ์น: ๊ฐ๋ฐ์ PC, ํ ์คํธ ์๋ฒ, ์ด์ ์๋ฒ์ ํ๊ฒฝ์ ์๋ฒฝํ ์ผ์น์ํต๋๋ค.
- ๋น ๋ฅธ ๋ฐฐํฌ: ์ด๋ฏธ์ง ์ ์ก๋ง์ผ๋ก ์๋ฒ ๋ฐฐํฌ๊ฐ ๋๋๋ฉฐ, ๋กค๋ฐฑ๋ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
- ์์ ํจ์จ์ฑ: ๊ฐ์๋จธ์ (VM)๋ณด๋ค ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ ํ๋์ ์๋ฒ์ ๋ ๋ง์ ์๋น์ค๋ฅผ ๋์ธ ์ ์์ต๋๋ค.
์ด์ Docker๋ฅผ ํตํด ๋ณต์กํ ์ค์น ๊ณผ์ ์์ด ํด๋ฆญ ํ ๋ฒ์ผ๋ก ์๋ฒ ํ๊ฒฝ์ ๊ตฌ์ถํด ๋ณด์ธ์!